﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NGI_Entidades
{
    public class Producto : CamposAuditoria
    {
        private Int32 _id = 0;
        private String _nombre = "";
        private String _descripcion = "";
        private Double _precioUnitario = 0f;
        private Boolean _activo = true;
        private PrecioPersonalizado[] _preciosPersonalizados;

        public Int32 ID
        {
            get { return _id; }
            set { _id = value; }
        }

        public String Nombre
        {
            get { return _nombre; }
            set { _nombre = value; }
        }

        public String Descripcion
        {
            get { return _descripcion; }
            set { _descripcion = value; }
        }

        public Double PrecioUnitario
        {
            get { return _precioUnitario; }
            set { _precioUnitario = value; }
        }

        public Boolean Activo
        {
            get { return _activo; }
            set { _activo = value; }
        }

        public PrecioPersonalizado[] PreciosPersonalizados
        {
            get { return _preciosPersonalizados; }
            set { _preciosPersonalizados = value; }
        }


        public Producto() { }

        public Producto(String Nombre, String Descripcion, Double PrecioUnitario, Boolean Activo, PrecioPersonalizado[] PrecioPersonalizado)
        {
            this._nombre = Nombre;
            this._descripcion = Descripcion;
            this._precioUnitario = PrecioUnitario;
            this._activo = Activo;
            this._preciosPersonalizados = PrecioPersonalizado;
        }

        public Producto(String Nombre, String Descripcion, Double PrecioUnitario, Boolean Activo) {
            this._nombre = Nombre;
            this._descripcion = Descripcion;
            this._precioUnitario = PrecioUnitario;
            this._activo = Activo;
        }

        public Producto(Int32 ID, String Nombre)
        {
            this._id = ID;
            this._nombre = Nombre;
        }

        public Producto(Int32 ID)
        {
            this._id = ID;
        }

        public Producto(Int32 ID, String Nombre, String Descripcion, Double PrecioUnitario, Boolean Activo)
        {
            this._id = ID;
            this._nombre = Nombre;
            this._descripcion = Descripcion;
            this._precioUnitario = PrecioUnitario;
            this._activo = Activo;
        }


        public Producto(Int32 ID, String Nombre, String Descripcion, Double PrecioUnitario, Boolean Activo, PrecioPersonalizado[] PrecioPersonalizado)
        {
            this._id = ID;
            this._nombre = Nombre;
            this._descripcion = Descripcion;
            this._precioUnitario = PrecioUnitario;
            this._activo = Activo;
            this._preciosPersonalizados = PrecioPersonalizado;
        }

        public static Producto ProductoNuevo(String Nombre, String Descripcion, Double PrecioUnitario, Boolean Activo, PrecioPersonalizado[] PrecioPersonalizado)
        {
            return new Producto(Nombre, Descripcion, PrecioUnitario, Activo, PrecioPersonalizado);
        }

        public static Producto ProductoExistente(Int32 ID, String Nombre, String Descripcion, Double PrecioUnitario, Boolean Activo, PrecioPersonalizado[] PrecioPersonalizado)
        {
            return new Producto(ID, Nombre, Descripcion, PrecioUnitario, Activo, PrecioPersonalizado);
        }

        public static Producto ProductoNuevo(String Nombre, String Descripcion, Double PrecioUnitario, Boolean Activo)
        {
            return new Producto(Nombre, Descripcion, PrecioUnitario, Activo);
        }

        public static Producto ProductoExistente(Int32 ID, String Nombre, String Descripcion, Double PrecioUnitario, Boolean Activo)
        {
            return new Producto(ID, Nombre, Descripcion, PrecioUnitario, Activo);
        }

        public static Producto ParaListar(Int32 ID, String Nombre)
        {
            return new Producto (ID, Nombre);
        }

        public static Producto SinDatos(Int32 ID)
        {
            return new Producto(ID);
        }
    }
}
